﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ProyectoBastanteo.Dominio;
using ProyectoBastanteo.Negocio;
using ProyectoBastanteo.Persistencia;
using NUnit.Framework;
using Spring.Context;
using Spring.Context.Support;





namespace ProyectoBastanteo.Prueba
{
    [TestFixture]
    public class AdministracionServicePrueba
    {

        IApplicationContext Spring = null;
        IAdministracionService Service = null;
        Cliente clienteRegistrado = null;
        TipoEmpresa tipoCreado = null;
        Representante repreRegistrado = null;
        Cliente ClienOBte = null;
        Representante RepreCrear = null;

        [TestFixtureSetUp]
        public void IniciarPruebas()
        {
             
            
            Spring = new XmlApplicationContext(
                "assembly://ProyectoBastanteo/ProyectoBastanteo/capaPersistencia.xml",
                "assembly://ProyectoBastanteo/ProyectoBastanteo/capaNegocio.xml"
                );
           
            Service = (IAdministracionService)Spring.GetObject("administracionService");
            tipoCreado = ((TipoempresaDAO)Spring.GetObject("tipEmpDAO_ADO")).Crear(
                new TipoEmpresa() { Abreviacion = "SAA" });
            ClienOBte = ((ClienteDAO)Spring.GetObject("ClienteDAO_ADO")).Crear(new Cliente()
                         {rucclie = "16447444433", razclie = "PeruBank",fecini = DateTime.Now, tipclie = tipoCreado, 
                             nroempl = 100});

            RepreCrear= ((RepresentanteDAO)Spring.GetObject("RepreDAO_ADO")).Crear(new Representante()
                         {codclie = ClienOBte, tidorep = "DNI", nudorep= "07787854", gruprep= "C", cargrep="Jefe de Sistemas",
                          nombrep = "Maria Acevedo", });


        }
        [Test]
        public void Test1_RegistrarCliente_DatosInsuficientes()
        {
            Assert.Catch<DatosInsufException>(delegate

            {
                  Service.RegistrarCliente("12345678901", "UPC", tipoCreado.Codigo,DateTime.Now, 0);
            });
        }
        [Test]
        public void Test2_RegistrarCliente_Ok()
        {
            Assert.DoesNotThrow(delegate
            {
                clienteRegistrado = Service.RegistrarCliente("12345678901", "UPC", tipoCreado.Codigo, DateTime.Now,
                     10);
            });
            Assert.IsNotNull(clienteRegistrado);
            Assert.Greater(clienteRegistrado.codclie, 0);
            Assert.AreEqual(clienteRegistrado.rucclie, "12345678901");
            Assert.AreEqual(clienteRegistrado.razclie, "UPC");
            Assert.AreEqual(clienteRegistrado.tipclie.Codigo, tipoCreado.Codigo);
            Assert.AreEqual(clienteRegistrado.nroempl, 10);
        }
        [Test]
        public void Test3_RegistrarCliente_Repetido()
        {
            Assert.Catch<EntidadRepetidaException>(delegate
            {
                Service.RegistrarCliente("12345678901", "UPC", tipoCreado.Codigo, DateTime.Now, 10);
            });
        }



        [Test]
        public void Test1_RegistrarRepre_DatosInsuficientes()
        {
            Assert.Catch<DatosInsufException>(delegate
            {

                Service.RegistrarRepresentante(ClienOBte.codclie, "Maria Acevedo", "DNI", null, "Jefe de Sistemas", "C");
              });
        }


        [Test]
        public void Test2_RegistrarRepre_Ok()
        {
            Assert.DoesNotThrow(delegate
            {

                repreRegistrado = Service.RegistrarRepresentante(ClienOBte.codclie, "Lourdes La Cruz", "DNI", "09975398", "Jefe de Recursos Humanos", "A");
                

            });
                       
            Assert.IsNotNull(repreRegistrado);
            Assert.Greater(repreRegistrado.codclie.codclie, 0);
            Assert.AreEqual(repreRegistrado.nudorep, "09975398");
            Assert.AreEqual(repreRegistrado.tidorep, "DNI");
            Assert.AreEqual(repreRegistrado.gruprep, "A");
            Assert.AreEqual(repreRegistrado.cargrep, "Jefe de Recursos Humanos");
        }


        [Test]
        public void Test3_RegistrarRepre_Repetido()
        {
            Assert.Catch<EntidadRepetidaException>(delegate
            {

                Service.RegistrarRepresentante(ClienOBte.codclie, "Maria Acevedo", "DNI", "07787854", "C", "Jefe de Sistemas");
            });
        }


        


        [TestFixtureTearDown]
        public void FinalizarPruebas()
        {
            ((ClienteDAO)Spring.GetObject("ClienteDAO_ADO")).Eliminar(clienteRegistrado);
            ((TipoempresaDAO)Spring.GetObject("tipEmpDAO_ADO")).Eliminar(tipoCreado);
            ((RepresentanteDAO)Spring.GetObject("RepreDAO_ADO")).Eliminar(repreRegistrado);
            Spring.Dispose();
            Spring = null;
        }


       





    }
}